home *** CD-ROM | disk | FTP | other *** search
/ DS-CD ROM 2 1993 August / DS CD-ROM 2.Ausgabe (August 1993).iso / programm / ds0257 / lib.exe / MQUEUE.LIB < prev    next >
Text File  |  1992-02-02  |  4KB  |  228 lines

  1. #IF !LIB4A86
  2. #ELSE
  3. #IF !INTERN_LIB4A86_S
  4. INTERN_LIB4A86_S EQU 01
  5. JMP START
  6. #ENDIF
  7. #ENDIF
  8. MQUEUEHEADER STRUC
  9. MQUEUELENGTH DW ?
  10. MQUEUEFREE DW ?
  11. MQUEUEIPTR DW ?
  12. MQUEUEOPTR DW ?
  13. MQUEUECOUNT DW ?
  14. MQUEUESEM DB ?
  15. MQUEUEDUMMY DB ?
  16. MQUEUEUSERDATA1 DW ?
  17. MQUEUEUSERDATA2 DW ?
  18. ENDS
  19. MQUEUEHEADERLENGTH EQU (TYPE MQUEUEHEADER)
  20. FIRSTMQUEUEENTRY EQU TYPE ( MQUEUEHEADER)
  21. MINMQUEUE EQU 256XD
  22. SETMQUEUESEMAPHOR EQU 0FFH
  23. FREEMQUEUESEMAPHOR EQU 000H
  24. MQUEUEISEMPTY EQU 08201H
  25. MQUEUEISFULL EQU 08202H
  26. MQUEUELENGTHERROR EQU 08203H
  27. MQUEUEBUFFERERROR EQU 08204H
  28. MQUEUEMESSAGEERROR EQU 08205H
  29. MQUEUEAKTIVERROR EQU 082FFH
  30. MQUEUESEG DW 0
  31. INTERN_CHECKMQUEUESEMAPHOR MACRO
  32. MOV AX,MQUEUEAKTIVERROR
  33. XCHG ES:MQUEUESEM,AL
  34. CMP AL,FREEMQUEUESEMAPHOR
  35. JE >M1
  36. STC
  37. RET
  38. M1:
  39. #EM
  40. INTERN_FREEMQUEUESEMAPHOR MACRO
  41. MOV ES:MQUEUESEM,FREEMQUEUESEMAPHOR
  42. #EM
  43. INITMQUEUE:
  44. CMP CX,MINMQUEUE
  45. JAE >L1
  46. MOV AX,MQUEUELENGTHERROR
  47. STC
  48. RET
  49. L1:
  50. MOV CS:MQUEUESEG,ES
  51. MOV ES:MQUEUESEM,SETMQUEUESEMAPHOR
  52. MOV ES:MQUEUELENGTH,CX
  53. INTERN_DELETEMQUEUE:
  54. SUB CX,MQUEUEHEADERLENGTH
  55. MOV ES:MQUEUEFREE,CX
  56. MOV AX,FIRSTMQUEUEENTRY
  57. MOV ES:MQUEUEIPTR,AX
  58. MOV ES:MQUEUEOPTR,AX
  59. XOR AX,AX
  60. MOV ES:MQUEUECOUNT,AX
  61. INTERN_FREEMQUEUESEMAPHOR
  62. RET
  63. DELETEMQUEUE_A:
  64. MOV ES,CS:MQUEUESEG
  65. DELETEMQUEUE:
  66. INTERN_CHECKMQUEUESEMAPHOR
  67. MOV CX,ES:MQUEUELENGTH
  68. JMP SHORT INTERN_DELETEMQUEUE
  69. LOCKMQUEUE_A:
  70. MOV ES,CS:MQUEUESEG
  71. LOCKMQUEUE:
  72. INTERN_CHECKMQUEUESEMAPHOR
  73. RET
  74. UNLOCKMQUEUE_A:
  75. MOV ES,CS:MQUEUESEG
  76. UNLOCKMQUEUE:
  77. INTERN_FREEMQUEUESEMAPHOR
  78. RET
  79. GETMQUEUESTATISTIK_A:
  80. MOV ES,CS:MQUEUESEG
  81. GETMQUEUESTATISTIK:
  82. INTERN_CHECKMQUEUESEMAPHOR
  83. MOV DX,ES:MQUEUELENGTH
  84. SUB DX,MQUEUEHEADERLENGTH
  85. MOV CX,ES:MQUEUEFREE
  86. MOV AX,ES:MQUEUECOUNT
  87. INTERN_FREEMQUEUESEMAPHOR
  88. RET
  89. WRITEMQUEUE_A:
  90. MOV ES, CS:MQUEUESEG
  91. WRITEMQUEUE:
  92. CLD
  93. INTERN_CHECKMQUEUESEMAPHOR
  94. PUSH DI,SI,CX
  95. MOV AX,MQUEUEMESSAGEERROR
  96. OR CH,CH
  97. JNZ >L8
  98. INC CX
  99. MOV AX,ES:MQUEUEFREE
  100. CMP CX,AX
  101. JBE >L1
  102. DEC AX
  103. POP CX
  104. PUSH AX
  105. MOV AX,MQUEUEISFULL
  106. JMP >L8
  107. L1:
  108. SUB ES:MQUEUEFREE,CX
  109. DEC CX
  110. MOV AX,ES:MQUEUELENGTH
  111. MOV DI,ES:MQUEUEIPTR
  112. MOV ES:[DI],CL
  113. INC DI
  114. CMP DI,AX
  115. IF A MOV DI,FIRSTMQUEUEENTRY
  116. SUB AX,DI
  117. CMP AX,CX
  118. JAE >L1
  119. SUB CX,AX
  120. XCHG CX,AX
  121. REP MOVSB
  122. MOV CX,AX
  123. MOV DI,FIRSTMQUEUEENTRY
  124. L1:
  125. REP MOVSB
  126. CMP DI,ES:MQUEUELENGTH
  127. IF A MOV DI,FIRSTMQUEUEENTRY
  128. MOV ES:MQUEUEIPTR,DI
  129. INC ES:MQUEUECOUNT
  130. CLC
  131. JMP >L9
  132. L8:
  133. STC
  134. L9:
  135. POP CX,SI,DI
  136. INTERN_FREEMQUEUESEMAPHOR
  137. RET
  138. LOOKMQUEUE_A:
  139. MOV ES,CS:MQUEUESEG
  140. LOOKMQUEUE:
  141. XOR CX,CX
  142. JMP SHORT READMQUEUE
  143. READMQUEUE_A:
  144. MOV ES, CS:MQUEUESEG
  145. READMQUEUE:
  146. CLD
  147. INTERN_CHECKMQUEUESEMAPHOR
  148. PUSH ES,DS,DI,SI,DX
  149. MOV DX,CX
  150. XCHG ES,DS
  151. MOV DI,MQUEUEOPTR
  152. XCHG DI,SI
  153. XOR CX,CX
  154. MOV AX,MQUEUEISEMPTY
  155. CMP MQUEUECOUNT,CX
  156. JE >L8
  157. L1:
  158. MOV CL,[SI]
  159. INC SI
  160. CMP SI,MQUEUELENGTH
  161. IF A MOV SI,FIRSTMQUEUEENTRY
  162. OR DX,DX
  163. JNZ >L1
  164. JCXZ >L9
  165. MOV AL,[SI]
  166. JMP >L9
  167. L1:
  168. MOV AX,MQUEUEBUFFERERROR
  169. CMP DX,CX
  170. JB >L8
  171. MOV DX,CX
  172. MOV AX,MQUEUELENGTH
  173. SUB AX,SI
  174. CMP AX,CX
  175. JAE >L1
  176. SUB CX,AX
  177. XCHG CX,AX
  178. REP MOVSB
  179. MOV CX,AX
  180. MOV SI,FIRSTMQUEUEENTRY
  181. L1:
  182. REP MOVSB
  183. CMP SI,MQUEUELENGTH
  184. IF A MOV SI,FIRSTMQUEUEENTRY
  185. MOV MQUEUEOPTR,SI
  186. DEC MQUEUECOUNT
  187. MOV CX,DX
  188. INC DX,1
  189. ADD MQUEUEFREE,DX
  190. CLC
  191. JMP >L9
  192. L8:
  193. STC
  194. L9:
  195. POP DX,SI,DI,DS,ES
  196. INTERN_FREEMQUEUESEMAPHOR
  197. RET
  198. #IF !INTERN_CMARK0
  199. INTERN_CMARK0 EQU 01H
  200. INTERN_CMARK1:
  201. PUSH BP
  202. MOV BP,SP
  203. MOV BX,06H
  204. SUB CH,[BP+SI]
  205. SUB AH,[BX+SI]
  206. DEC SP
  207. DEC CX
  208. INC DX
  209. XOR AL,041H
  210. CMP B[02820H],DH
  211. INC BX
  212. SUB W[BX+SI],SP
  213. INC DX
  214. CS AND B[BP+DI+043H],DL
  215. DEC AX
  216. INC BP
  217. DEC BP
  218. DEC BP
  219. INC BP
  220. PUSH DX
  221. AND B[BP+SI],CH
  222. SUB CH,[BP+SI]
  223. POP DX
  224. MOV SP,BP
  225. POP BP
  226. RET
  227. #ENDIF
  228.